package com.sumfun.blog.controller;

import cn.hutool.core.lang.UUID;
import com.sumfun.blog.common.BaseResponse;
import com.sumfun.blog.common.ErrorCode;
import com.sumfun.blog.common.ResultUtils;
import com.sumfun.blog.exception.BusinessException;
import com.sumfun.blog.model.domain.Files;
import com.sumfun.blog.service.FilesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.net.URL;

@RestController
public class FileUploadController {
    @Value("${file.upload.path}")
    private String uploadDirPath;

    @Autowired
    private FilesService filesService;

    @PostMapping("/upload")
    public BaseResponse<Files> handleFileUpload(@RequestParam("file") MultipartFile file) {
        // 检查文件是否为空
        if (file.isEmpty()) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }

        try {
            // 创建上传目录的File对象（注意：这里不会实际创建目录，只是表示一个路径）
            File uploadDir = new File(uploadDirPath);
            System.out.println("上传文件的存放目录：" + uploadDir.getAbsolutePath());

            // 获取文件大小、原始文件名等信息
            long size = file.getSize();
            String originalFilename = file.getOriginalFilename();
            String extname = getFileExtension(originalFilename); // 提取文件扩展名
            String newFileName = UUID.randomUUID().toString() + extname; // 生成新文件名

            // 拼接完整的上传路径
            String filePath = uploadDir.getAbsolutePath() + File.separator + newFileName;
            File uploadedFile = new File(filePath);

            // 将上传的文件保存到指定路径
            file.transferTo(uploadedFile);

            // 保存文件信息
            Files files = new Files();
            files.setFileName(originalFilename);
            files.setFileType(extname);
            files.setFileSize(size);
            files.setFilePath(filePath);
            files.setFileUrl("http://113.44.61.243/sumfun_images/" + newFileName);
            Boolean result = filesService.save(files); // 保存文件信息到数据库或其他存储
            if (result) {
                return ResultUtils.success(files);
            }
            return ResultUtils.success(null);
        } catch (IOException e) {
            throw new BusinessException(ErrorCode.SYSTEM_ERROR);
        }
    }

    // 辅助方法：从文件名中提取扩展名
    private String getFileExtension(String filename) {
        int index = filename.lastIndexOf(".");
        if (index != -1 && index < filename.length() - 1) {
            return filename.substring(index);
        }
        return ""; // 如果没有找到扩展名，则返回空字符串
    }
}